package main

import "fmt"

// 结构体演示组合 来达到类似类的继承
type Teacher struct {
	Name  string
	Age   int
	Title string
}

// 给Teacher 绑定个方法
func (t *Teacher) TeacherInfo() {
	fmt.Printf("姓名:%s 年龄：%d 职称：%s", t.Name, t.Age, t.Title)
}

// type Course struct {
// 	Teacher Teacher // 另一个结构体的变量放进来 这种形式有点牵强 需要 c.Teacher.Age 形式获取
// 	Name    string
// 	Price   int
// 	Url     string
// }

type Course struct {
	Teacher // 匿名嵌套进来 自动回把方法拼进来 通过c.Age访问到Teacher，当然也可以通过c.Teacher.Age 形式访问
	Name    string
	Price   int
	Url     string
}

// 给 Course 课程绑定方法
func (c Course) CourseInfo() {
	fmt.Printf("课程:%s 价格：%d 讲师信息：%s %d %s", c.Name, c.Price, c.Teacher.Name, c.Teacher.Age, c.Title)
}

// 这种继承的方法有点牵强
func main() {
	// go 语言的继承 组合
	t := Teacher{
		Name:  "zhangsan",
		Age:   30,
		Title: "教授",
	}
	c := Course{
		Teacher: t,
		Name:    "scrapy",
		Price:   100,
		Url:     "http://www.dd.com",
	}
	c.CourseInfo()
}
